/**
 * @作者 zw
 * @微信公号 搬砖暗夜码农
 * @开源项目 $ https://gitee.com/zhouwei5208888/spring-boot-distributed
 * @我的博客 $ http://itzhouwei.com
 * @创建时间 2023/6/3 10:21 上午
 */
package com.itzhouwei.netty.day4;


import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 *
 *
 * @description: Netty 服务端代码
 * @author：zw，微信公共号：yingshengzw
 * @date: 2021/8/28
 * @Copyright：公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、学习、分享、成长，让自己和他人都能有所收获！
 */
@SuppressWarnings("all")
public class NettyServer {

    public static void main(String[] args) throws InterruptedException {

        new  NettyServer().bing(7958);
    }

    private  void  bing(int port){
        // 第一步，分别创建两个处理网络的EventLoopGroup。
        EventLoopGroup parentGroup = new NioEventLoopGroup();
        EventLoopGroup childGroup = new NioEventLoopGroup();
        try {
            // 第二步，初始化服务器
            ServerBootstrap sb = new ServerBootstrap();//相当于Netty服务器
            // 第三步，给服务器做一系列的配置
            sb.group(parentGroup, childGroup)
                    .channel(NioServerSocketChannel.class)
                    .option(ChannelOption.SO_BACKLOG, 1024)
                    .childHandler(new MyChannelInitializer());

            System.err.println("Server 启动了");
            //第四步 绑定端口
            ChannelFuture channelFuture = sb.bind(port).sync(); //监听指定端口
            System.err.println("zw-commerce-netty start done. {关注公众号：搬砖暗夜码农，获取源码}");

            // 第五步，等待服务器关闭
            channelFuture.channel().closeFuture().sync();//同步等待关闭启动服务器的结果
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            parentGroup.shutdownGracefully();
            childGroup.shutdownGracefully();
        }
    }
}
